node.jsのいろいろなモジュール29 – RailsライクなMVCフレームワーク「sails」
sailsフレームワーク
nodeにはこれでもかというくらい新しいフレームワークがでてきてます。 そして、フレームワークの中でもruby on railsみたいなフレームワークがたくさんあります。 以前、compoundjs(railwayjs)というフレームワークを紹介しましたが、 このsailsというフレームワークも、この系統のフレームワークで、scaffoldやモデルのgenerate機能を持っています。 また、Railsとは違い、JSON APIが組み込まれているのが特徴です。 sailsの組み込みコマンドでモデルを作成すると、そのもモデルに対するJSON形式のCRUD用URLが使えるようになります。 今回はセットアップからサンプルアプリ作成を試してみましょう。
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.5
- Node.js : v0.10.0
- npm : 1.2.14
npmを使用してsailsをインストールしましょう。 このモジュールはグローバルオプションをつけてインストールします。
% npm install -g sails
sailsをインストールすると、関連するモジュールもたくさんインストールされます。 依存関係を見ると、expressやsocket.ioに依存しているのがわかります。 (node-typescriptも依存してるんですが、現状で使えるのか不明)
使ってみる
sailsをインストールすると、sailsコマンドが使用できるようになります。 さっそくmySailsアプリケーションを作成してみましょう。 sails new <アプリ名>で新しいsailsアプリケーションが生成されます。
% sails new mySails info: Generating Sails project (mySails)... ・ ・
作成したプロジェクトのディレクトリへ移動し、コントローラを作成してみましょう。 sails generate controller <コントローラ名> <関数名>として生成します。
% cd mySails % sails generate controller hello index
生成されたコントローラ(controllers/HelloController.js)のindex関数を修正します。 view関数を使用すると、この後作成するejsファイルにフォワードさせることができます。
// To trigger this action locally, visit: `http://localhost:port/hello/index` index: function (req,res) { return res.view({ users: [{name: 'taro'}, {name: 'hanako'},{name: 'mike'}] }); }
viewsディレクトリにhelloディレクトリを作成し、index.ejsファイルを作成しましょう。 コントローラで渡されたオブジェクトを表示しています。
<div> <h1>My first view</h1> <h2 id="toc-users">Users:</h2> <ul> <% _.each(users, function (user) { %> <li><%= user.name %></li> <% }) %> </ul> </div>
そして、config/routes.jsを修正します。このファイルはルーティング情報を定義しています。 localhost:1337/hiというリクエストがきたら、HelloControllerのindex関数を実行します。
// To route the home page to the "index" action of the "home" controller: '/' : { controller : 'home' }, //追加 '/hi': { controller: 'hello', action: 'index' }
ここまでできたら、サーバを起動しましょう。 下記コマンドで起動したら、http://localhost:1337/hiへアクセスしてみてください。
% sails lift
さて、次にモデルを作成してみましょう。モデルもgenerateコマンドで作成できます。
% sails generate user info: Generating model and controller for user ・ ・
modelsディレクトリにUser.jsが生成されてます。ここでプロパティを定義すれば使えます。(デフォルトでid等のフィールドを持っています) すでにこの時点で、/user/createへアクセスすると、ブラウザに下記のようなデータが表示され、登録が実行されます。
{"id":1,"createdAt":"2013-04-15T01:01:06.723Z","updatedAt":"2013-04-15T01:01:06.723Z"}
また、次のようなURLもモデルを生成した時点で使用することができます。
# Userリスト情報 http://localhost:1337/user # idによるUser検索 http://localhost:1337/user/<id> # User作成 http://localhost:1337/user/create?name=Fisslewick(GETメソッド) (もしくはhttp://localhost:1337/userへPOST) # User更新 http://localhost:1337/user/update/1?name=Gordo (もしくはhttp://localhost:1337/user/1へPUT) # User削除 http://localhost:1337/user/destroy/1 (もしくはhttp://localhost:1337/user/1へDELETE)
まとめ
さて今回は、sailsを少しだけ使ってみました。 ちなみに、compoundjsとの比較はこんなかんじです。